package com.xxl.interceptor;

import com.xxl.util.FieldConst;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 拦截未登录用户
 * @author xxl
 * @date 2023/3/14
 */
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        if (session.isNew()) {
            System.out.println("session是新创建的");
        }
        /*
            场景：通过session里用户判断是否登录
            设置session时间(是这个session对象在服务器的存活时间，一般为30分钟)：如果关闭浏览页，再打开session中还是存着用户信息的.关闭浏览器在打开就要重新登录，
            （注意session是可以跨同个服务器的多个页面这就是保存用户信息的核心(它存在web上下文中)，cookie则不可以，只能在某一页，但是cookie
            是存在请求中的，也就是每次请求都会携带当前页的cookie）
            session是是通过cookie中存的sessionId获得的，但保存sessionId的cookie是服务器自己创建的，一旦关闭浏览器
            再次打开页面就会重新创建cookie同时session也会变化，(想要完成“记住我”这种功能，需要cookie和session一起合作)
            每次请求获取的cookie也当前页保存的cookie(重点，这就是重定向时cookie没保存成功的原因)
        */
        Object attribute = session.getAttribute(FieldConst.USER_INFO);

        System.out.println("拦截的sessionId=" + session.getId());

        System.out.println("用户信息="+attribute);
        //用户存在则放行
        if (attribute != null) {
            return true;
        }
        //注意路径问题
        response.sendRedirect(request.getContextPath()+"/view/login.html");
        return false;
    }
}
